package controleur;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;

import presentation.*;
import solitaire.application.*;

public class CSolitaire extends Solitaire implements ICSolitaire{

	protected IPSolitaire presentation;
	
	public CSolitaire(String arg0, Usine arg1) {
		super(arg0, arg1);
		initialiser();
		setPresentation(new PSolitaire("Klondike", this));
	}
	
	public IPSolitaire getPresentation()
	{
		return presentation;
	}
	
	public void setPresentation(IPSolitaire p)
	{
		presentation = p;
	}
	
	public static void main(String args []){
		CSolitaire cs = new CSolitaire("Klondike", new CUsine());
		cs.run();
	}
	
	public void initialiser(){
		super.initialiser();
	}
	
	public Colonne[] getPilesAlternees(){
		return (Colonne[]) pilesAlternees;
	}
	
	public TasDeCartesColorees[] getPilesColorees (){
		return (TasDeCartesColorees[]) pilesColorees;
	}
	
	public Sabot getSabot (){
		return (Sabot) sabot;
	}
	
	@Override
	public void troisCartes()
	{
		if (((CSabot) sabot).getCachees().getNombre() > 0)
		{
			try {
				List<PCarte> list_cartes = new ArrayList<PCarte>();
				Carte tmp1 = ((CSabot)sabot).getCachees().getSommet();
				list_cartes.add(((PCarte)((CCarte)tmp1).getPresentation()));
				if (((CSabot) sabot).getCachees().getNombre() >= 2)
				{
					Carte tmp2 = ((CSabot)sabot).getCachees().getCarte(((CSabot)sabot).getCachees().getNombre()-1);
					list_cartes.add(((PCarte)((CCarte)tmp2).getPresentation()));
					if(((CSabot) sabot).getCachees().getNombre() >= 3)
					{
						Carte tmp3 = ((CSabot)sabot).getCachees().getCarte(((CSabot)sabot).getCachees().getNombre()-2);
						list_cartes.add(((PCarte)((CCarte)tmp3).getPresentation()));
					}
				}
				
				super.troisCartes();
				((PSolitaire)getPresentation()).troisCartes(list_cartes);
				list_cartes.removeAll(list_cartes);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		else
			System.out.println("Sabot vide...");
	}
	
	public void nouveauTour()
	{
		if(((CSabot)sabot).isRetournable())
		{
			try {
				((CSabot)sabot).retourner();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	protected void carteDAlterneeVersAlternee()
	{
		super.carteDAlterneeVersAlternee();
		((PSolitaire)this.presentation).carteDAlterneeVersAlternee();
	}
	
	public void carteDAlterneeVersCouleur() {
		super.carteDAlterneeVersCouleur();
		((PSolitaire)this.presentation).carteDAlterneeVersCouleur();
	}
	
	public void carteDeSabotVersAlternee()
	{
		super.carteDeSabotVersAlternee();
		((PSolitaire)this.presentation).carteDeSabotVersAlternee();
	}
	
	public void carteDeSabotVersCouleur()
	{
		super.carteDeSabotVersCouleur();
		((PSolitaire)this.presentation).carteDeSabotVersCouleur();
	}
	
	public void deplacerSousTas()
	{
		super.deplacerSousTas();
		((PSolitaire)this.presentation).deplacerSousTas();
	}
	
	public void deplacerTas()
	{
		super.deplacerTas();
		((PSolitaire)this.presentation).deplacerTas();
	}
	
	public void retournerCarte()
	{
		super.retournerCarte();
		((PSolitaire)this.presentation).retournerCarte();
	}
		
}
